JIT Compiler

更新时间:2023-07-03 14:25

JIT Compiler(Just-in-time Compiler) 即时翻译。

相关资料

最早的Java建置方案是由解释器(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。

针对这个问题,业界首先开发出JIT(just in time)编译器。当Java执行runtime环境时,每遇到一个新的类(class),类是Java程序中的功能群组-JIT编译器在此时就会针对这个类进行编译(compile)作业。经过编译后的程序,被优化成相当精简的二进制,这种程序的执行速度相当快。花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。

基于对JIT的经验,业界发展出动态编译器(dynamic compiler),动态编译器仅针对较常被执行的程序码进行编译,其余部分仍使用转译程序来执行。也就是说,动态编译器会研判是否要编译每个类。动态编译器拥有两项利器:一是转译器,另一则是JIT,它透过智慧机制针对每个类进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态编译器针对程序的特性或者是让程序执行几个循环,再根据结果决定是否编译这段程序码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态编译器会根据「历史资料」做决策,所以程序执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态编译器产生的程序码执行的速度超越以前的JIT技术,平均速度可提高至50%。

工作原理

JIT是运行时环境的一部分,它把解释型语言的可执行文件程序集转换到原生可执行代码。

安全策略规定被编译的代码必须是类型安全的,否则将抛出一个异常,JIT过程结束。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}